package controllers

/**
* @author: 李显赫
* @create: 2022-11-4 12:52:23
**/

import (
	"encoding/json"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	"myc/models"
	"strconv"
)


// 返回结构的JSON结构体
type JSONStruct struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

type PanelController struct {
	beego.Controller
}

// 新增
func (this *PanelController) Post() {

	panel := &models.Panel{}

	json.Unmarshal(this.Ctx.Input.RequestBody, panel)

	// 创建orm对象
	o := orm.NewOrm()

	// 实现插入
	_, err := o.Insert(panel)

	ans := &JSONStruct{200, "ok", 1}

	if err != nil {
		beego.Info("插入失败")
		beego.Info(err)
		ans.Data = 0
	}

	this.Data["json"] = ans
	this.ServeJSON()

}

// 修改
func (this *PanelController) Put() {

	panel := &models.Panel{}

	json.Unmarshal(this.Ctx.Input.RequestBody, panel)

	// 创建orm对象
	o := orm.NewOrm()

	beego.Info(panel)

	res, err := o.Raw("update panel set json = ? where id = ?", panel.Json, panel.Id).Exec()

	// 获取更新数据影响的行数

	ans := &JSONStruct{200, "ok", res}

	if err != nil {
		beego.Info("修改失败")
		beego.Info(err)
		ans.Code = 500
		ans.Msg = "更新失败"
		ans.Data = 0
	}
	this.Data["json"] = ans
	this.ServeJSON()
}

// 查询
func (this *PanelController) Get() {

	params := this.Ctx.Input.Params()
	sid, _ := params[":id"]
	// 创建orm对象
	o := orm.NewOrm()
	ans := &JSONStruct{200, "ok", nil}

	// 如果不是查询所有
	if sid != "" {
		panel := models.Panel{}
		id, _ := strconv.ParseInt(sid, 10, 64)

		// 创建结构体对象
		panel.Id = id

		beego.Info(id)

		// 使用主键查询
		err := o.Read(&panel)

		// 使用Username字段查询
		// err := o.Read(&user, "Username")

		if err != nil {
			beego.Info("查询失败")
			ans.Data = nil
			ans.Code = 500
			ans.Msg = "No exist"
		}else{
			ans.Data = panel
		}
	} else {
		var panels []models.Panel

		// 使用主键查询
		_, err := o.Raw("SELECT id, json FROM panel").QueryRows(&panels)

		if err != nil {
			beego.Info("查询失败")
			ans.Data = nil
			ans.Code = 500
			ans.Msg = "No exist"
		}else{
			ans.Data = panels
		}
	}
	this.Data["json"] = ans
	this.ServeJSON()
}

// 删除
func (this *PanelController) Delete() {

	params := this.Ctx.Input.Params()

	id, _ := strconv.ParseInt(params[":id"], 10, 64)

	// 创建orm对象
	o := orm.NewOrm()

	// 创建结构体对象
	panel := models.Panel{Id: id}

	// 使用主键查询
	err := o.Read(&panel)

	// 使用Username字段查询
	// err := o.Read(&user, "Username")

	if err != nil {
		beego.Info("查询失败")
		return
	}
	beego.Info("查询结果为:", panel)

	mystruct := &JSONStruct{200, "ok", panel}
	this.Data["json"] = mystruct
	this.ServeJSON()
}
